/**
 * @file
 * @author  Tsin Smith <tsin.creator@gmail.com>
 *
 * @section DESCRIPTION
 *
 */

#ifndef __TSIN_RUNTIME_SPELLENGINE_HPP__
#define __TSIN_RUNTIME_SPELLENGINE_HPP__

#include <tsin/runtime/common.hpp>

#include <tsin/runtime/Engine.hpp>

#include <tsin/runtime/InputHandleWork.hpp>
#include <tsin/runtime/GameEventHandleWork.hpp>
#include <tsin/runtime/DisplayResetWork.hpp>
#include <tsin/runtime/BulletBlitWork.hpp>
#include <tsin/runtime/CharacterBlitWork.hpp>
#include <tsin/runtime/FrontBlitWork.hpp>
#include <tsin/runtime/DisplayUpdateWork.hpp>
#include <tsin/runtime/TimerDelayWork.hpp>

#include <tsin/util/EventListener.hpp>

namespace tsin {

        class RUNTIME_DLLEXPORT SpellEngine : public Engine, public EventListener {
        public:
                SpellEngine();
                virtual ~SpellEngine();

                virtual void init(GameRuntime *runtime);

                int handle(EventSource *source, int eventNo);

        private:
                InputHandleWork inputHandle;
                GameEventHandleWork gameEventHandle;
                DisplayResetWork displayReset;
                BulletBlitWork bulletBlit;
                CharacterEarlyBlitWork earlyCharacterBlit;
                CharacterLateBlitWork lateCharacterBlit;
                FrontBlitWork frontBlit;
                DisplayUpdateWork displayUpdate;
                TimerDelayWork timerDelay;
        };

}

#endif /* __TSIN_RUNTIME_SPELLENGINE_HPP__ */
